iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0
自我挑戰組

30天打造自己的RSS閱讀器:Go語言與DevOps的實戰應用系列 第 14

Day 14:開始用 GitHub Actions 實現持續整合(CI)流程,好潮喔

  • 分享至 

  • xImage
  •  

過去幾天,我們專注於 RSS 閱讀器的設計、開發和單元測試。今天我們將轉向一個非常關鍵的開發實踐:持續整合(Continuous Integration,簡稱CI)。持續整合不僅是現代軟體開發的標配,它也為我們帶來許多不可或缺的好處。CI 確保了每一次代碼更改都會被自動測試,這樣可以早期發現問題,提高軟體品質和可靠性。

為什麼CI這麼重要?

CI 系統像一個警戒一直在背後的守護者,它會自動檢查新提交的代碼是否會破壞已有的功能或引入新的錯誤。這不僅減少了人工測試的需要,還加速了開發過程,讓開發團隊能更專注於新功能的開發。

行業成功案例

  1. Netflix: 使用CI/CD流程,Netflix 能夠每天進行數千次的部署,讓他們能快速回應市場需求並修復錯誤。
  2. Etsy: 透過持續整合和持續部署,Etsy 成功地提升了他們網站的性能和可用性,同時還降低了錯誤率。

今天,我們將學習如何在 GitHub Actions 中設定基本的 CI 流程。我們會先專注於 CI 部分,並將 publish 和 deploy 階段留給未來的文章。

為什麼今天只講 CI,不講 CD?

你可能會好奇,明明我們前幾天跟 DevOps 一起提到的概念叫做 "CI/CD",但是為什麼我們現在只實作 CI(持續整合)流程,怎麼不順便做一下 CD(持續部署)呢?其實,答案相當簡單,但也很重要。
簡單來說,我們現階段還沒有完全準備好進行部署的所有細節。更具體地說,我們目前還沒有實作 Dockerfile 以及還沒有設置部署的生產環境。因此,我們,嗯,先略過 CD 的部分。

為什麼需要 .github/workflows/main.yml

.github/workflows/main.yml 是 GitHub Actions 的配置檔案。通過這個檔案,我們可以精確地定義 CI/CD 管道:哪些任務應該在何時運行,以及這些任務的執行條件。

基礎架構

這份配置檔案採用 YAML 格式。其主要結構如下:

name: CI
on:
  push:
    branches:
      - main
jobs:
  build:
    runs-on: ubuntu-22.04
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Setup Go
        uses: actions/setup-go@v4
        with:
          go-version: "1.20"
      - name: Run tests
        run: go test

  • name: 定義流程名稱。
  • on: 觸發條件。這裡是當代碼被推送到 main 分支。
  • jobs: 包含一個或多個任務。
    • build: 任務名稱。
    • runs-on: 執行環境,這裡是 Ubuntu 22.04。
    • steps: 運行的步驟。

逐項解析

  1. Checkout code: 從 GitHub 儲存庫抓取代碼。
  2. Setup Go: 設置指定版本(1.20)的 Go 環境。
    • 注意我有把 "1.20" 這段文字用雙引號包起來,這樣 yaml parser 才不會把這段文字當成浮點數,並錯誤地解析為 "我要用 1.2 版的 Go 來編譯"
  3. Run tests: 執行我們在前文提到的單元測試。

實作步驟

  1. 轉到你的專案目錄,找到或建立 .github/workflows/ 文件夾。
  2. 在該資料夾建立 main.yml 檔案。
  3. 將上述的 YAML code 貼到 main.yml
  4. 提交並推送這些變更。

一旦這些變更被推送到 main 分支,GitHub Actions 將自動啟動 CI 流程。

展望

今天,我們著重探討了如何利用 GitHub Actions 配置基本的 CI 流程。在接下來的文章中,我們將進一步講解如何觀察這些自動化測試的結果,以及如何進行後續的發佈和部署。


上一篇
Day 13:談談 Go 的套件管理:從 GOPATH 到 go mod
下一篇
Day 15:開始執行 GitHub Actions 的 workflow
系列文
30天打造自己的RSS閱讀器:Go語言與DevOps的實戰應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言